package jp.co.piratealliance.pirateAllianceWeb.common.util;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;

import jp.co.piratealliance.pirateAllianceWeb.common.exception.SystemException;

/**
 * copyright Founder 2012
 * 
 * @date 2012/07/02 V1.0新規作成
 * 
 * @author xuwei
 * @version V1.0
 * @brief Date変換処理Utilityクラスの定義
 * 
 * @since 1.0
 * @todo なし
 */
public class DateUtils {
	/**
	 * Date Style
	 */
	public static final String DATESTYLE = "yyyyMMddHHmmss";

	/**
	 * Date Style for Extention
	 */
	public static final String DATESTYLE_EX = "yyyy-MM-dd_HH-mm-ss";

	/**
	 * Date Style for Year & Month
	 */
	public static final String DATESTYLE_YEAR_MONTH = "yyyyMM";

	/**
	 * Date Style for Short
	 */
	public static final String DATESTYLE_SHORT = "yyyyMMdd";

	/**
	 * Date Style for Extention
	 */
	public static final String DATESTYLE_SHORT_EX = "yyyy/MM/dd";

	/**
	 * Date Style for Year & Month Extention
	 */
	public static final String DATESTYLE_YEAR_MONTH_EX = "yyyy/MM";

	/**
	 * Date Style for detail
	 */
	public static final String DATESTYLE_DETAIL = "yyyyMMddHHmmssSSS";

	public static final String DATESTYLE_DETAIL_MM = "yyyy/MM/dd hh:mm";
	
	public static final String DATESTYLE_DETAIL_MM_24 = "yyyy/MM/dd HH:mm";

	public static final String DATESTYLE_DETAIL_MM_SS = "yyyy/MM/dd hh:mm:ss";

	public static final String DATESTYLE_DETAIL_HH = "yyyy/MM/dd HH:mm";
	
	public static final String DATESTYLE_DETAIL_HH_MM_SS = "yyyy/MM/dd HH:mm:ss";

	/**
	 * 何もしないコンストラクタ。
	 */
	protected DateUtils() {
	}

	/**
	 * 日期をチェックする
	 * 
	 * @param value
	 *            文字列 (YYYYMMDD)
	 * @return boolean
	 */
	public static boolean checkDateValid(String value) {
		if (value == null) {
			return false;
		}

		value = value.trim();

		if ("".equals(value)) {
			return false;
		}
		// check input date length
		if (value.length() != 8) {
			return false;
		}

		// check input date content
		if (!NumberUtils.checkIntNumberValid(value)) {
			return false;
		}

		String month = value.substring(0, 6);
		int day = Integer.parseInt(value.substring(6, 8));
		if (day < 1 || day > getMonthLastDay(month)) {
			return false;
		} else {
			return true;
		}
	}

	/**
	 * 日期をチェックする
	 * 
	 * @param value
	 *            文字列 (YYYY/MM)
	 * @return boolean
	 */
	public static boolean checkDateValidYearMonthEx(String value) {
		if (value == null) {
			return false;
		}

		value = value.trim();

		if ("".equals(value)) {
			return false;
		}
		// check input date length
		if (value.length() != 7) {
			return false;
		}

		// check input date content
		if (!NumberUtils.checkIntNumberValid(value.replace("/", ""))) {
			return false;
		}

		if (!"/".equals(String.valueOf(value.charAt(4)))) {
			return false;
		}

		String yearStr = value.substring(0, 4);
		String monthStr = value.substring(5, 7);
		if (!NumberUtils.checkIntNumberValid(yearStr)
				|| !NumberUtils.checkIntNumberValid(monthStr)
				|| monthStr.compareTo("01") < 0 || monthStr.compareTo("12") > 0) {
			return false;
		}

		return true;
	}

	/**
	 * 日期をチェックする
	 * 
	 * @param value
	 *            文字列 (YYYY/MM)
	 * @return boolean
	 */
	public static boolean checkDateValidYearEx(String value) {
		if (value == null) {
			return false;
		}

		value = value.trim();

		if ("".equals(value)) {
			return false;
		}
		// check input date length
		if (value.length() != 4) {
			return false;
		}

		// check input date content
		if (!NumberUtils.checkIntNumberValid(value.replace("/", ""))) {
			return false;
		}

		String yearStr = value.substring(0, 4);
		if (!NumberUtils.checkIntNumberValid(yearStr)) {
			return false;
		}

		return true;
	}

	/**
	 * 日期をチェックする
	 * 
	 * @param value
	 *            文字列 (YYYY/MM/DD)
	 * @return boolean
	 */
	public static boolean checkDateValidShortEx(String value) {
		if (value == null) {
			return false;
		}

		value = value.trim();

		if ("".equals(value)) {
			return false;
		}
		// check input date length
		if (value.length() != 10) {
			return false;
		}

		// check input date content
		if (!NumberUtils.checkIntNumberValid(value.replace("/", ""))) {
			return false;
		}

		// [BUG-JP]23041 2011/07/19 start
		String yearStr = value.substring(0, 4);
		String monthStr = value.substring(5, 7);
		String dayStr = value.substring(8, 10);
		if (!NumberUtils.checkIntNumberValid(yearStr)
				|| !NumberUtils.checkIntNumberValid(monthStr)
				|| !NumberUtils.checkIntNumberValid(dayStr)) {
			return false;
		}
		// [BUG-JP]23041 2011/07/19 end

		if (!"/".equals(String.valueOf(value.charAt(4)))
				|| !"/".equals(String.valueOf(value.charAt(7)))) {
			return false;
		}

		String month = value.substring(0, 7).replace("/", "");
		int day = Integer.parseInt(value.substring(8, 10));
		if (day < 1 || day > getMonthLastDay(month)) {
			return false;
		} else {
			return true;
		}
	}

	/**
	 * 指定した西暦日付の曜日コードを取得する
	 * 
	 * @param value
	 *            (yyyymmdd)
	 * @return int 曜日コード
	 */
	public static int getYoubiCode(String value) {
		// check input date content
		if (!checkDateValid(value)) {
			return -1;
		}

		value = value.trim();
		// get given date object
		int year = Integer.parseInt(value.substring(0, 4));
		int month = Integer.parseInt(value.substring(4, 6));
		int day = Integer.parseInt(value.substring(6, 8));
		Calendar cal = Calendar.getInstance();
		cal.clear();
		cal.set(year, month - 1, day);

		// day of week of given date
		int result = cal.get(Calendar.DAY_OF_WEEK);

		// 曜日コードを取得する
		if (result < 0) {
			return -1;
		}
		result = result % 7 - 1;
		if (result < 1) {
			result += 7;
		}

		return result;
	}

	/**
	 * 指定した西暦日付の曜日を取得する
	 * 
	 * @param ymd
	 *            西暦(yyyymmdd)
	 * @return String 曜日
	 */
	public static String getYoubiName(String ymd) {
		String youbi = "";

		// check input data
		if (!checkDateValid(ymd)) {
			return youbi;
		}

		// 曜日コードを取得する
		int code = getYoubiCode(ymd);

		// 曜日を取得する
		switch (code) {
		case 1:
			youbi = "月";
			break;
		case 2:
			youbi = "火";
			break;
		case 3:
			youbi = "水";
			break;
		case 4:
			youbi = "木";
			break;
		case 5:
			youbi = "金";
			break;
		case 6:
			youbi = "土";
			break;
		case 7:
			youbi = "日";
			break;
		default:
			break;
		}

		return youbi;
	}

	/**
	 * 指定した日付（YYYYMMDD）から年だけ（あるいは月だけ、日だけ）を取得
	 * 
	 * @param ymd
	 *            年月日(YYYYMM)
	 * @param style
	 *            YY-年/MM-月/DD-日
	 * @return 結果の日付
	 */
	public static int getYYYYorMMorDD(String ymd, String style) {
		int ret = 0;

		// check input data
		if (!checkDateValid(ymd)) {
			return ret;
		}

		ymd = ymd.trim();
		// get output value of given style
		if ("YY".equalsIgnoreCase(style)) {
			// year
			ret = Integer.parseInt(ymd.substring(0, 4));
		} else if ("MM".equalsIgnoreCase(style)) {
			// month
			ret = Integer.parseInt(ymd.substring(4, 6));
		} else if ("DD".equalsIgnoreCase(style)) {
			// day
			ret = Integer.parseInt(ymd.substring(6));
		}

		return ret;
	}

	/**
	 * 西暦をyyyymmdd ----> yyyy年mm月dd日(yyyy/mm/dd)のようなフォーマットに変換する
	 * 
	 * @param date
	 *            西暦の文字列
	 * @param shorttype
	 *            フォーマットタイプ true:yyyy/mm/dd false:yyyy年mm月dd日
	 * @return String 変換した文字列
	 * 
	 *         2003/11/07 新規作成 zhanjc
	 */
	public static String formatDate(String date, boolean shorttype) {
		String formatDate = null;

		// check input date
		if (!checkDateValid(date)) {
			return "";
		}

		date = date.trim();
		if (shorttype) {
			// output in yyyy/mm/dd format
			formatDate = date.substring(0, 4) + "/" + date.substring(4, 6)
					+ "/" + date.substring(6, 8);
		} else {
			// output in yyyy年mm月dd日 format
			formatDate = date.substring(0, 4) + "年" + date.substring(4, 6)
					+ "月" + date.substring(6, 8) + "日";
		}

		return formatDate;
	}

	/**
	 * 月末日を取得する
	 * 
	 * @param date
	 *            (YYYYMM or YYYYMMDD)
	 * @return int
	 */
	public static int getMonthLastDay(String date) {
		// check input data
		if (date == null) {
			return -1;
		}
		date = date.trim();
		if ("".equals(date)) {
			return -1;
		}

		if (date.length() != 6 && date.length() != 8) {
			return -1;
		}

		try {
			// check if input string consist of number
			if (!NumberUtils.checkIntNumberValid(date)) {
				return -1;
			}

			// check month
			int m = Integer.parseInt(date.substring(4, 6));
			if (m < 1 || m > 12) {
				return -1;
			}

			// check year
			int y = Integer.parseInt(date.substring(0, 4));
			if (y <= 0) {
				return -1;
			}

			// 月末日を取得する
			int k = 0;
			Calendar cal = Calendar.getInstance();
			cal.clear();
			cal.set(y, m - 1, 1);
			k = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
			if (k < 1) {
				return -1;
			} else {
				return k;
			}
		} catch (Throwable throwable) {
			return -1;
		}
	}

	/**
	 * 月末日を取得する
	 * 
	 * @param year
	 *            (YYYY)
	 * @param month
	 *            (MM)
	 * @return int 月末日文字列
	 * 
	 */
	public static int getMonthLastDay(int year, int month) {
		// check input data
		if (year < 1900 || month < 1 || month > 12) {
			return -1;
		}

		// 指定した年月の月末日を取得する
		try {
			Calendar cal = Calendar.getInstance();
			cal.clear();
			cal.set(year, month - 1, 1);
			int k = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
			if (k < 1) {
				return -1;
			} else {
				return k;
			}
		} catch (Throwable throwable) {
			return -1;
		}
	}

	/**
	 * 指定した週の週末日を取得する
	 * 
	 * @param date
	 *            (YYYYMMDD)
	 * @param range
	 *            マイナス：指定日付前のrange週目 ゼロ：指定日付の週 プラス：指定日付後のrange週目
	 * @return String[] Saturday and Sunday (Format:YYYYMMDD)
	 */
	public static String[] getWeekend(String date, int range) {
		int code = 0;
		int dayNum = 0;
		String[] retDate = new String[2];

		// check input date
		if (!checkDateValid(date)) {
			return null;
		}

		date = date.trim();
		// 時間間隔を得る
		code = getYoubiCode(date);
		dayNum = 6 - code % 7 + 7 * range;
		// 指定した週の週末日の日付を取得する
		retDate[0] = getMultiPrevDay(date, dayNum);
		retDate[1] = getMultiPrevDay(retDate[0], 1);

		return retDate;
	}

	/**
	 * 日時をチェックする
	 * 
	 * @param value
	 *            文字列 (YYYYMMDDHHMMSS)
	 * @return boolean
	 * @throws Exception
	 *             処理例外
	 */
	public static boolean checkDateTimeValid(String value) throws Exception {
		// check input data
		if (value == null) {
			return false;
		}
		value = value.trim();
		if ("".equals(value)) {
			return false;
		}

		if (value.length() != 14) {
			return false;
		}

		// check input data in time and date formats
		if (checkDateValid(value.substring(0, 8))) {
			int hh = NumberUtils.parseInt(value.substring(8, 10), true);
			// 针对30小时制时间验证, 扩大了验证范围(update by wengguilin20080211)
			if (0 <= hh && hh < 30) {
				// hour
				int mm = NumberUtils.parseInt(value.substring(10, 12), true);
				if (0 <= mm && mm < 60) {
					// minute
					int ss = NumberUtils
							.parseInt(value.substring(12, 14), true);
					if (0 <= ss && ss < 60) {
						// second
						return true;
					}
				}
			}
		}
		return false;
	}

	/**
	 * 時間をチェックする
	 * 
	 * @param value
	 *            文字列 (HHMMSS/HHMM)
	 * @return boolean
	 */
	public static boolean checkTimeValid(String value) {
		// check input data
		if (value == null) {
			return false;
		}
		value = value.trim();
		if (!NumberUtils.checkIntNumberValid(value)) {
			return false;
		}
		if ((value.length() != 4) && (value.length() != 6)) {
			return false;
		}

		// check input data in time formats
		int hh = Integer.parseInt(value.substring(0, 2));
		// Mod by Yusx Start
		// if ((0 <= hh) && (hh < 24)) {
		// TODO(Yusx)针对30小时制时间验证, 扩大了验证范围
		if ((0 <= hh) && (hh < 30)) {
			// Mod by Yusx End
			// hour
			int mm = Integer.parseInt(value.substring(2, 4));
			if ((0 <= mm) && (mm < 60)) {
				// minute
				if (value.length() == 6) {
					// HHMMSS
					int ss = Integer.parseInt(value.substring(4, 6));
					if ((0 <= ss) && (ss < 60)) {
						// second
						return true;
					}
				} else {
					// HHMM
					return true;
				}
			}
		}

		return false;
	}

	/**
	 * 指定した年が「うるう年」かチェックする
	 * 
	 * @param year
	 *            int
	 * @return boolean
	 */
	public static boolean isLeapYear(int year) {
		boolean ret = false;

		if (year % 400 == 0) {
			ret = true;
		} else if (year % 4 == 0 && year % 100 != 0) {
			ret = true;
		}

		return ret;
	}

	/**
	 * 24時間制 --> 30時間制変換機能
	 * 
	 * @param time
	 *            Format:yyyymmddhhmmss/yyyymmddhhmm
	 * @return String
	 */
	public static String convert24to30(String time) {
		String retTime = null;
		if (time == null) {
			return "";
		}

		time = time.trim();
		if ((time.length() == 14 || time.length() == 12)) {
			String ymd = time.substring(0, 8);
			String hms = time.substring(8);
			if (!checkDateValid(ymd)) {
				return "";
			}
			if (!checkTimeValid(hms)) {
				return "";
			}
			// get hour value
			int hour = Integer.parseInt(time.substring(8, 10));
			if (hour < 6) {
				// get the last date of ymd
				ymd = getMultiPrevDay(ymd, -1);
				hour = hour + 24;
				retTime = ymd + hour + time.substring(10);
			} else {
				retTime = time;
			}
		} else if ((time.length() == 6 || time.length() == 4)) {
			if (!checkTimeValid(time)) {
				return "";
			}
			// get hour value
			// update by wengguilin for BETYTT-6164
			// int hour = Integer.parseInt(time.substring(0, 2));
			// if (hour < 6) {
			// hour = hour + 24;
			// retTime = hour + time.substring(2);
			// } else {
			// retTime = time;
			// }

			retTime = time;
		}

		return (retTime == null ? "" : retTime);
	}

	/**
	 * 30時間制 --> 24時間制変換機能
	 * 
	 * @param time
	 *            Format:yyyymmddhhmmss/yyyymmddhhmm
	 * @return String
	 */
	public static String convert30to24(String time) {
		String retTime = null;

		if (time == null) {
			return "";
		}

		time = time.trim();

		if ((time.length() == 14 || time.length() == 12)) {
			String ymd = time.substring(0, 8);
			String hms = time.substring(8);
			if (!NumberUtils.checkIntNumberValid(hms)) {
				return "";
			}
			if (!checkDateValid(ymd)) {
				return "";
			}
			// get hour value
			int hour = Integer.parseInt(time.substring(8, 10));
			if (hour >= 24) {
				// get the last date of ymd
				hour = hour - 24;
				ymd = getMultiPrevDay(ymd, 1);
			}
			retTime = ymd + StringUtils.addPreZero(hour, 2)
					+ time.substring(10);
		}

		return (retTime == null ? "" : retTime);
	}

	/**
	 * 12時間制 --> 24時間制変換機能
	 * 
	 * @param time
	 *            Format:hhmmssPM/hhmmAM
	 * @return String
	 */
	public static String convert12to24(String time) {
		String retTime = null;

		if (time == null) {
			return "";
		}

		time = time.trim();

		if ((time.length() == 8 || time.length() == 6)) {
			// get morning/afternoon mark
			String flag = time.substring(time.length() - 2);
			String hms = time.substring(0, time.length() - 2);
			if (!checkTimeValid(hms)) {
				return "";
			}
			// get hour value
			int hour = Integer.parseInt(time.substring(0, 2));
			if ("PM".equals(flag)) {
				if (hour != 12) {
					// afternoon
					hour = hour + 12;
				}
				retTime = hour + time.substring(2, time.length() - 2);
			} else {
				// morning
				if (hour == 12) {
					retTime = "00" + time.substring(2, time.length() - 2);
				} else {
					retTime = time.substring(0, time.length() - 2);
				}
			}
		}

		return (retTime == null ? "" : retTime);
	}

	/**
	 * 24時間制 --> 12時間制変換機能
	 * 
	 * @param time
	 *            Format:hhmmss/hhmm
	 * @return String
	 */
	public static String convert24to12(String time) {
		String retTime = null;

		if (checkTimeValid(time)) {
			time = time.trim();
			// get hour value
			int hour = Integer.parseInt(time.substring(0, 2));
			if (hour < 12) {
				if (hour == 0) {
					retTime = "12" + time.substring(2) + "AM";
				} else {
					// morning
					retTime = time + "AM";
				}
			} else {
				// afternoon
				hour = hour - 12;
				if (hour == 0) {
					retTime = "12" + time.substring(2) + "PM";
				} else {
					retTime = StringUtils.addPreZero(hour, 2)
							+ time.substring(2) + "PM";
				}
			}
		}

		return (retTime == null ? "" : retTime);
	}

	/**
	 * 12時間制 --> 30時間制変換機能
	 * 
	 * @param time
	 *            Format:yyyymmddhhmmssPM/yyyymmddhhmmAM
	 * @return String
	 */
	public static String convert12to30(String time) {
		String retTime = null;

		if (time == null) {
			return "";
		}

		time = time.trim();

		if ((time.length() == 16 || time.length() == 14)) {
			// get morning/afternoon mark
			String flag = time.substring(time.length() - 2);
			String ymd = time.substring(0, 8);
			String hms = time.substring(8, time.length() - 2);
			if (!checkDateValid(ymd)) {
				return "";
			}
			if (!checkTimeValid(hms)) {
				return "";
			}
			// get hour value
			int hour = Integer.parseInt(time.substring(8, 10));
			if ("PM".equalsIgnoreCase(flag)) {
				// afternoon
				if (hour != 12) {
					hour = hour + 12;
				}
				retTime = ymd + hour + time.substring(10, time.length() - 2);
			} else {
				if (hour == 12) {
					hour = 0;
				}
				// morning
				if (hour < 6) {
					ymd = getMultiPrevDay(ymd, -1);
					hour = hour + 24;
					retTime = ymd + hour
							+ time.substring(10, time.length() - 2);
				} else {
					retTime = time.substring(0, time.length() - 2);
				}
			}
		}

		return (retTime == null ? "" : retTime);
	}

	/**
	 * 30時間制 --> 12時間制変換機能
	 * 
	 * @param time
	 *            Format:yyyymmddhhmmss/yyyymmddhhmm
	 * @return String
	 */
	public static String convert30to12(String time) {
		String retTime = null;

		if (time == null) {
			return "";
		}

		time = time.trim();

		if ((time.length() == 12 || time.length() == 14)) {
			String ymd = time.substring(0, 8);
			String hms = time.substring(8);
			if (!checkDateValid(ymd)) {
				return "";
			}
			if (!NumberUtils.checkIntNumberValid(hms)) {
				return "";
			}
			// get hour value
			int hour = Integer.parseInt(time.substring(8, 10));
			if (hour >= 24) {
				// date change
				hour = hour - 24;
				ymd = getMultiPrevDay(ymd, 1);
			}
			retTime = StringUtils.addPreZero(hour, 2) + time.substring(10);
			retTime = ymd + convert24to12(retTime);
		}

		return (retTime == null ? "" : retTime);
	}

	/**
	 * 30時間制の時間計算（加算、減算）
	 * 
	 * @param time
	 *            (YYYYMMDDHHMMSS/YYYYMMDDHHMM)
	 * @param hour
	 *            int
	 * @param min
	 *            int
	 * @return 結果の文字列
	 */
	public static String compute30Time(String time, int hour, int min) {
		String ret = null;

		if (Math.abs(hour) >= 30 || Math.abs(hour) >= 60) {
			return "";
		}

		if (time == null) {
			return "";
		}

		time = time.trim();

		if ((time.length() == 12 || time.length() == 14)) {
			String ymd = time.substring(0, 8);
			String hms = time.substring(8);
			if (!checkDateValid(ymd)) {
				return "";
			}
			if (!NumberUtils.checkIntNumberValid(hms)) {
				return "";
			}
			int inputHour = Integer.parseInt(time.substring(8, 10));
			int inputMin = Integer.parseInt(time.substring(10, 12));
			if (inputHour >= 30) {
				return "";
			}
			if (inputMin >= 60) {
				return "";
			}
			inputMin = inputMin + min;
			// minute
			if (inputMin >= 60) {
				inputMin = inputMin - 60;
				inputHour = inputHour + 1;
			} else if (inputMin < 0) {
				inputMin = inputMin + 60;
				inputHour = inputHour - 1;
			}
			// hour
			inputHour = inputHour + hour;
			if (inputHour < 0) {
				do {
					ymd = getMultiPrevDay(ymd, -1);
					inputHour += 24;
				} while (inputHour < 0);
			} else {
				while (inputHour >= 30) {
					ymd = getMultiPrevDay(ymd, 1);
					inputHour -= 24;
				}
			}
			ret = ymd + StringUtils.addPreZero(inputHour, 2)
					+ StringUtils.addPreZero(inputMin, 2) + time.substring(12);
		}

		return (ret == null ? "" : ret);
	}

	/**
	 * 指定した時間（HHMMSS）から時だけ（あるいは分だけ、秒だけ）を取得
	 * 
	 * @param time
	 *            年月日(HHMMSS)
	 * @param style
	 *            "HH"-時/"MM"-分/"SS"-秒
	 * @return 結果の時間
	 */
	public static int getHHorMMorSS(String time, String style) {
		int ret = 0;

		if (!checkTimeValid(time)) {
			return ret;
		}
		time = time.trim();
		if ("HH".equalsIgnoreCase(style)) {
			// hour
			ret = Integer.parseInt(time.substring(0, 2));
		} else if ("MM".equalsIgnoreCase(style)) {
			// minute
			ret = Integer.parseInt(time.substring(2, 4));
		} else if ("SS".equalsIgnoreCase(style)) {
			// second
			ret = Integer.parseInt(time.substring(4));
		}

		return ret;
	}

	/**
	 * 時刻をHHMMSS ----> HH時MM分SS秒(HH:MM:SS)のようなフォーマットに変換する
	 * 
	 * @param datetime
	 *            時刻の文字列
	 * @param shorttype
	 *            フォーマットタイプ true:HH:MM:SS false:HH時MM分SS秒
	 * @return String 変換した文字列
	 */
	public static String formatTime(String datetime, boolean shorttype) {
		String formatDatetime = null;
		// check input data
		if (datetime == null) {
			return "";
		}
		datetime = datetime.trim();
		if ("".equals(datetime) || datetime.length() > 6) {
			return "";
		}

		if (!NumberUtils.checkIntNumberValid(datetime)) {
			return "";
		}

		// ensure that datetime length is 6
		if (datetime.length() < 6) {
			datetime = StringUtils.addPreZero(datetime, 6);
		}

		// ouput in the following format
		if (shorttype) {
			// HH:MM format
			formatDatetime = datetime.substring(0, 2) + ":"
					+ datetime.substring(2, 4) + ":" + datetime.substring(4);
		} else {
			// HH時MM分SS秒 format
			formatDatetime = datetime.substring(0, 2) + "時"
					+ datetime.substring(2, 4) + "分" + datetime.substring(4, 6)
					+ "秒";
		}

		return (formatDatetime == null ? "" : formatDatetime);
	}

	/**
	 * 以前の日付を取得する
	 * 
	 * @param value
	 *            当日(yyyymmdd)
	 * @param spans
	 *            int
	 * @return String 以前の日付(yyyymmdd)
	 */
	public static String getMultiPrevDay(String value, int spans) {
		if (!checkDateValid(value)) {
			return "";
		}
		value = value.trim();
		int year = Integer.parseInt(value.substring(0, 4));
		int month = Integer.parseInt(value.substring(4, 6));
		int day = Integer.parseInt(value.substring(6, 8));
		Calendar cal = Calendar.getInstance();
		cal.clear();
		cal.set(year, month - 1, day);
		cal.add(Calendar.DATE, spans);
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");

		return simpleDateFormat.format(cal.getTime());
	}
	/**
	 * 
	 * <pre>
	 * 以前の日付を取得する
	 *            当月(YYYY/MM)
	 * </pre>
	 * @param value
	 * @param spans
	 * @return　以前の日付(YYYY/MM)
	 */
	public static String getMultiPrevMonth(String value, int spans) {
		if(!checkDateValidYearMonthEx(value)) {
			return "";
		}
		value = value.trim();
		int year = Integer.parseInt(value.substring(0, 4));
		int month = Integer.parseInt(value.substring(5, 7));
		Calendar cal = Calendar.getInstance();
		cal.clear();
		cal.set(year, month - 1, 1);
		cal.add(Calendar.MONTH, spans);
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM");
		
		return simpleDateFormat.format(cal.getTime());
	}

	/**
	 * 以前の日付を取得する
	 * 
	 * @param value
	 *            当日(yyyymmdd)
	 * @param type
	 *            int
	 * @param spans
	 *            int
	 * @return String 以前の日付(yyyymmdd)
	 */
	public static String getMultiChgDay(String value, int type, int spans) {
		if (!checkDateValid(value)) {
			return "";
		}
		value = value.trim();
		int year = Integer.parseInt(value.substring(0, 4));
		int month = Integer.parseInt(value.substring(4, 6));
		int day = Integer.parseInt(value.substring(6, 8));
		Calendar cal = Calendar.getInstance();
		cal.clear();
		cal.set(year, month - 1, day);
		cal.add(type, spans);
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");

		return simpleDateFormat.format(cal.getTime());
	}

	/**
	 * 日数のカウント
	 * 
	 * @param day1
	 *            開始日付（yyyymmdd）
	 * @param day2
	 *            終了日付（yyyymmdd）
	 * 
	 * @return int 日付期間
	 */
	public static int computeDays(String day1, String day2) {
		// check input data
		if (day1 == null || day2 == null) {
			return -1;
		}
		day1 = day1.trim();
		day2 = day2.trim();
		if ("".equals(day1) || "".equals(day2)) {
			return -1;
		}

		if (day1.length() != 8 || day2.length() != 8) {
			return -1;
		}

		// convert the number string to Calendar object
		int num = 0;
		String y1 = day1.substring(0, 4);
		String m1 = day1.substring(4, 6);
		String d1 = day1.substring(6, 8);
		String y2 = day2.substring(0, 4);
		String m2 = day2.substring(4, 6);
		String d2 = day2.substring(6, 8);
		Calendar c1 = Calendar.getInstance();
		Calendar c2 = Calendar.getInstance();
		c1.set(Integer.parseInt(y1), Integer.parseInt(m1) - 1,
				Integer.parseInt(d1), 0, 0, 0);
		c2.set(Integer.parseInt(y2), Integer.parseInt(m2) - 1,
				Integer.parseInt(d2), 0, 0, 0);

		// 間隔の日数を取得する
		if (c1.after(c2)) {
			return -1;
		}
		if(c1.equals(c2)){
			return 0;
		}
		for (; c1.before(c2);) {
			c1.add(Calendar.DATE, 1);
			num++;
		}

		return num;
	}

	/**
	 * 和暦をyymmdd ----> yy-mm-dd和暦フォーマットに変換する
	 * 
	 * @param date
	 *            和暦の文字列
	 * @param shorttype
	 *            フォーマットタイプ true:yyyy/mm/dd false:yyyy年mm月dd日
	 * @param wareki
	 *            和暦のチェック true:yy-mm-dd false:参照shorttype
	 * @return String 変換した文字列
	 */
	public static String formatDate(String date, boolean shorttype,
			boolean wareki) {
		String formatDate = null;

		if (wareki) {
			if (date == null) {
				return "";
			}
			date = date.trim();
			if ("".equals(date) || (date.length() != 6)) {
				return "";
			}

			if (!NumberUtils.checkIntNumberValid(date)) {
				return "";
			}
			String year = date.substring(0, 2);
			if (Integer.parseInt(year) > 0) {
				if (!checkDateValid("19" + date)) {
					return "";
				}
			}
			formatDate = date.substring(0, 2) + "-" + date.substring(2, 4)
					+ "-" + date.substring(4, 6);
		} else {
			return formatDate(date, shorttype);
		}

		return (formatDate == null ? "" : formatDate);
	}

	/**
	 * 西暦をyyyymm ----> yyyy年mm月のようなフォーマットに変換する
	 * 
	 * @param date
	 *            西暦の文字列
	 * @param shorttype
	 *            フォーマットタイプ true:yyyy/mm false:yyyy年mm月
	 * @return String 変換した文字列
	 */
	public static String formatMonth(String date, boolean shorttype) {
		String formatDate = null;

		if (date == null) {
			return "";
		}
		date = date.trim();
		if ("".equals(date) || (date.length() != 6 && date.length() != 8)) {
			return "";
		}

		if (date.length() == 6) {
			date = date + "01";
		}
		if (!checkDateValid(date)) {
			return "";
		}
		if (shorttype) {
			formatDate = date.substring(0, 4) + "/" + date.substring(4, 6);
		} else {
			formatDate = date.substring(0, 4) + "年" + date.substring(4, 6)
					+ "月";
		}

		return (formatDate == null ? "" : formatDate);
	}

	/**
	 * 西暦をYYYYMM(999999) ----> YYYY年MM月(9999年z9月)のようなフォーマットに変換する
	 * 
	 * @param date
	 *            西暦の文字列
	 * @param shorttype
	 *            フォーマットタイプ true: 999999 -> 9999/z9 false:999999 -> 9999年z9月
	 * @return String 変換した文字列
	 */
	public static String filteZeroMonth(String date, boolean shorttype) {
		String formatDate = null;
		String checkDate = null;

		if (date == null) {
			return "";
		}
		date = date.trim();
		if ("".equals(date) || (date.length() != 6 && date.length() != 8)) {
			return "";
		}

		if (date.length() == 6) {
			// yyyymm format of input parameter
			checkDate = date + "01";
		} else {
			// yyyymmdd format of input parameter
			checkDate = date;
		}
		if (!checkDateValid(checkDate)) {
			return "";
		}
		if (shorttype) {
			formatDate = date.substring(0, 4) + "/"
					+ StringUtils.filteZero(date.substring(4, 6));
		} else {
			formatDate = date.substring(0, 4) + "年"
					+ StringUtils.filteZero(date.substring(4, 6)) + "月";
		}

		return (formatDate == null ? "" : formatDate);
	}

	/**
	 * 西暦をmmdd ----> mm月dd日のようなフォーマットに変換する
	 * 
	 * @param date
	 *            西暦の文字列
	 * @param shorttype
	 *            フォーマットタイプ true: mm/dd false:mm月dd日
	 * @return String 変換した文字列
	 */
	public static String formatMonthDay(String date, boolean shorttype) {
		String formatDate = null;
		String checkDate = null;
		int length = 0;

		if (date == null) {
			return "";
		}
		date = date.trim();
		if ("".equals(date) || (date.length() != 4 && date.length() != 8)) {
			return "";
		}

		if (date.length() == 4) {
			// mmdd format of input parameter
			checkDate = "1900" + date;
		} else {
			// yyyymmdd format of input parameter
			checkDate = date;
		}
		if (!checkDateValid(checkDate)) {
			return "";
		}
		length = date.length() - 4;
		if (shorttype) {
			formatDate = date.substring(0 + length, 2 + length) + "/"
					+ date.substring(2 + length, 4 + length);
		} else {
			formatDate = date.substring(0 + length, 2 + length) + "月"
					+ date.substring(2 + length, 4 + length) + "日";
		}

		return (formatDate == null ? "" : formatDate);
	}

	/**
	 * 西暦をmmdd ----> Zm月Zd日のようなフォーマットに変換する
	 * 
	 * @param date
	 *            西暦の文字列
	 * @param shorttype
	 *            フォーマットタイプ true: mm/dd false:mm月dd日
	 * @return String 変換した文字列
	 */
	public static String filteZeroformatMonthDay(String date, boolean shorttype) {
		String formatDate = null;
		String checkDate = null;
		int length = 0;

		if (date == null) {
			return "";
		}
		date = date.trim();
		if ("".equals(date) || (date.length() != 4 && date.length() != 8)) {
			return "";
		}

		if (date.length() == 4) {
			// mmdd format of input parameter
			checkDate = "1900" + date;
		} else {
			// yyyymmdd format of input parameter
			checkDate = date;
		}
		if (!checkDateValid(checkDate)) {
			return "";
		}
		length = date.length() - 4;
		if (shorttype) {
			formatDate = String.valueOf(NumberUtils.convertToInt(date
					.substring(0 + length, 2 + length)))
					+ "/"
					+ String.valueOf(NumberUtils.convertToInt(date.substring(
							2 + length, 4 + length)));
		} else {
			formatDate = String.valueOf(NumberUtils.convertToInt(date
					.substring(0 + length, 2 + length)))
					+ "月"
					+ String.valueOf(NumberUtils.convertToInt(date.substring(
							2 + length, 4 + length))) + "日";
		}

		return (formatDate == null ? "" : formatDate);
	}

	/**
	 * 西暦をYYYYMMDD(99999999) ----> YYYY年MM月DD日(9999年z9月z9日)のようなフォーマットに変換する
	 * 
	 * @param date
	 *            西暦の文字列
	 * @param shorttype
	 *            フォーマットタイプ true: 99999999 -> 9999/z9/z9 false:99999999 ->
	 *            9999年z9月z9日
	 * @return String 変換した文字列
	 */
	public static String filteZeroDate(String date, boolean shorttype) {
		String formatDate = null;

		if (!checkDateValid(date)) {
			return "";
		}
		date = date.trim();
		if (shorttype) {
			formatDate = date.substring(0, 4) + "/"
					+ StringUtils.filteZero(date.substring(4, 6)) + "/"
					+ StringUtils.filteZero(date.substring(6, 8));
		} else {
			formatDate = date.substring(0, 4) + "年"
					+ StringUtils.filteZero(date.substring(4, 6)) + "月"
					+ StringUtils.filteZero(date.substring(6, 8)) + "日";
		}

		return formatDate;
	}

	/**
	 * 時刻をHHMMSS(999999) ----> HH時MM分SS秒(Z9時99分99秒)のようなフォーマットに変換する
	 * 
	 * @param datetime
	 *            時刻の文字列
	 * @param shorttype
	 *            フォーマットタイプ true: 9999 -> Z9:99 false:999999 -> Z9時99分99秒
	 * @return String 変換した文字列
	 */
	public static String filteZeroTime(String datetime, boolean shorttype) {
		String formatDatetime = null;

		if (datetime == null) {
			return "";
		}
		datetime = datetime.trim();
		if ("".equals(datetime) || datetime.length() > 6) {
			return "";
		}

		if (datetime.length() < 6) {
			datetime = StringUtils.addPreZero(datetime, 6);
		}
		if (!checkTimeValid(datetime)) {
			return "";
		}
		if (shorttype) {
			formatDatetime = StringUtils.filteZero(datetime.substring(0, 2))
					+ ":" + datetime.substring(2, 4);
		} else {
			formatDatetime = StringUtils.filteZero(datetime.substring(0, 2))
					+ "時" + datetime.substring(2, 4) + "分"
					+ datetime.substring(4, 6) + "秒";
		}
		return formatDatetime;
	}

	/**
	 * 入力した文字列を西暦に変換する
	 * 
	 * @param targetString
	 *            変換文字列
	 * @param mode
	 *            変換モード 0:yyyymmd -> yyyymm0d 1:yyyymdd -> yyyy0m01 2:yyyymdd ->
	 *            yyyy0101
	 * @return String 変換した文字列
	 */
	public static String formatDateByMode(String targetString, int mode) {
		String formatString = null;

		if (targetString == null || targetString.trim().equals("")
				|| targetString.trim().equals("0")) {
			return "";
		}
		if (mode == 0) { // 日
			if (targetString.length() < 7) {
				return "";
			} else if (targetString.length() == 7) {
				formatString = targetString.substring(0, 6) + "0"
						+ targetString.substring(6, 7);
			} else {
				formatString = targetString.substring(0, 8);
			}
		}
		if (mode == 1 && targetString.length() >= 6) { // 月
			if (targetString.length() < 5) {
				return "";
			} else if (targetString.length() == 5) {
				formatString = targetString.substring(0, 4) + "0"
						+ targetString.substring(4, 5);
			} else {
				formatString = targetString.substring(0, 6);
			}
			formatString = formatString + "01";
		}
		if (mode == 2) { // 年
			if (targetString.length() < 4) {
				return "";
			}
			formatString = targetString.substring(0, 4);
			formatString = formatString + "0101";
		}
		if (!checkDateValid(formatString)) {
			return "";
		}

		return (formatString == null ? "" : formatString);
	}

	/**
	 * 西暦--->和暦変換する
	 * 
	 * @param yyyymmdd
	 *            西暦の文字列
	 * 
	 * @return String 和暦の文字列(eg:平成2年11月22日)
	 */
	public static String seyireki2Wareki(String yyyymmdd) {
		String wyymmdd = null;

		// check
		if (!checkDateValid(yyyymmdd)) {
			return "";
		}

		// 変換
		yyyymmdd = yyyymmdd.trim();
		try {
			JaCalendar jc = new JaCalendar(yyyymmdd);
			wyymmdd = jc.toJaString();
		} catch (Exception ne) {
			throw new SystemException(yyyymmdd, ne);
		}

		return wyymmdd;
	}

	/**
	 * 西暦--->和暦変換する
	 * 
	 * @param 西暦の文字列
	 * 
	 * @return String 和暦の文字列(元号YY/MM/DD)
	 */
	public static String seyireki2Wareki9(String date) {
		String wyymmdd = null;
		try {
			JaCalendar jc = new JaCalendar(date);
			wyymmdd = jc.toJa9String();
		} catch (Exception ne) {
			throw new SystemException(date, ne);
		}
		if (wyymmdd == null) {
			return date;
		}
		return wyymmdd;
	}

	/**
	 * 和暦check
	 * 
	 * @param date
	 *            和暦
	 * @return boolean
	 */
	public static boolean checkWareki(String date) {
		if (StringUtils.isEmpty(date)) {
			return true;
		}
		if (!StringUtils.isHalfEN(date.substring(0, 1))) {
			return false;
		}
		if (date.indexOf("/") > 0) {
			String[] s = date.split("/");
			if (s.length != 3) {
				return false;
			}
			if (s[0].length() == 1) {
				return false;
			}
			if (!StringUtils.isHalfNum(s[0].substring(1))) {
				return false;
			}
			if (!StringUtils.isHalfNum(s[1])) {
				return false;
			}
			if (!StringUtils.isHalfNum(s[2])) {
				return false;
			}
			if (s[1].length() == 1) {
				s[1] = "0" + s[1];
			}
			if (s[2].length() == 1) {
				s[2] = "0" + s[2];
			}
			date = s[0] + s[1] + s[2];
		}
		JaCalendar jc = new JaCalendar(date.toUpperCase());
		return jc.isValid();
	}

	/**
	 * 和暦 ---> 西暦変換する
	 * 
	 * @param era
	 *            元号 (H:平成/M:明治/T:大正/S:昭和)
	 * @param yy
	 *            和暦の年(YY)
	 * @param mm
	 *            和暦の月(MM)
	 * @param dd
	 *            和暦の日(DD)
	 * 
	 * @return String 西暦の文字列 (YYYYMMDD)
	 */
	public static String wareki2Seyireki(String era, String yy, String mm,
			String dd) {
		String ymd = null;

		// check
		if (era == null || yy == null || mm == null || dd == null
				|| yy.equals("00")) {
			return "";
		}
		yy = yy.trim();
		mm = mm.trim();
		dd = dd.trim();
		if (!checkDateValid("19" + yy + mm + dd)) {
			return "";
		}

		// 変換
		try {
			JaCalendar jc = new JaCalendar(era + yy + mm + dd);
			ymd = jc.toEnString();
			ymd = ymd.replace("/", "");
		} catch (Exception ne) {
			throw new SystemException(yy + mm + dd, ne);
		}

		return ymd;
	}

	/**
	 * Date型 ---> String型変換する
	 * 
	 * @param date
	 *            入力のDate型
	 * @param style
	 *            入力のフォーマット
	 * @return String String型時間
	 */
	public static String dateToString(Date date, String style) {
		if (date == null) {
			return "";
		}
		SimpleDateFormat dFmt = new SimpleDateFormat(style);
		return dFmt.format(date);
	}

	/**
	 * String型 ---> Date型変換する
	 * 
	 * @param date
	 *            入力のString型 yyyy/MM OR yyyy/MM/dd
	 * @return Date Date型時間
	 */
	public static Date stringToDate(String date) {

		Date da = null;
		if (!StringUtils.isEmpty(date)) {
			String style = DateUtils.DATESTYLE_SHORT_EX;
			if (date.length() == 7)
				style = DateUtils.DATESTYLE_YEAR_MONTH_EX;
			else
				style = DateUtils.DATESTYLE_SHORT_EX;
			try {
				da = new SimpleDateFormat(style).parse(date);
			} catch (ParseException pe) {
				throw new SystemException("date=" + date + " style=" + style,
						pe);
			}
		}
		return da;
	}

	/**
	 * String型 ---> Date型変換する
	 * 
	 * @param date
	 *            入力のString型
	 * @param style
	 *            入力のフォーマット
	 * @return Date Date型時間
	 */
	public static Date stringToDate(String date, String style) {
		Date da = null;
		if (!StringUtils.isEmpty(date)) {
			try {
				da = new SimpleDateFormat(style).parse(date);
			} catch (ParseException pe) {
				throw new SystemException("date=" + date + " style=" + style,
						pe);
			}
		}
		return da;
	}

	/**
	 * 以前の日付を増加する
	 * 
	 * @param date
	 *            入力のString型
	 * @param style
	 *            入力のフォーマット
	 * @param spans
	 *            いくら増加する
	 * @return String 以前の日付
	 */
	public static String addYear(String date, String style, int spans) {
		return addDate(date, style, Calendar.YEAR, spans);
	}

	/**
	 * 以前の日付を増加する
	 * 
	 * @param date
	 *            入力のString型
	 * @param style
	 *            入力のフォーマット
	 * @param spans
	 *            いくら増加する
	 * @return String 以前の日付
	 */
	public static String addMonth(String date, String style, int spans) {
		return addDate(date, style, Calendar.MONTH, spans);
	}

	/**
	 * 以前の日付を増加する
	 * 
	 * @param date
	 *            入力のString型
	 * @param style
	 *            入力のフォーマット
	 * @param spans
	 *            いくら増加する
	 * @return String 以前の日付
	 */
	public static String addDay(String date, String style, int spans) {
		return addDate(date, style, Calendar.DAY_OF_MONTH, spans);
	}

	/**
	 * 以前の日付を増加する
	 * 
	 * @param date
	 *            入力のString型
	 * @param style
	 *            入力のフォーマット
	 * @param spans
	 *            いくら増加する
	 * @return String 以前の日付
	 */
	public static String addHour(String date, String style, int spans) {
		return addDate(date, style, Calendar.HOUR_OF_DAY, spans);
	}

	/**
	 * 以前の日付を増加する
	 * 
	 * @param date
	 *            入力のString型
	 * @param style
	 *            入力のフォーマット
	 * @param spans
	 *            いくら増加する
	 * @return String 以前の日付
	 */
	public static String addMinute(String date, String style, int spans) {
		return addDate(date, style, Calendar.MINUTE, spans);
	}

	/**
	 * 以前の日付を増加する
	 * 
	 * @param date
	 *            入力のString型
	 * @param style
	 *            入力のフォーマット
	 * @param spans
	 *            いくら増加する
	 * @return String 以前の日付
	 */
	public static String addSecond(String date, String style, int spans) {
		return addDate(date, style, Calendar.SECOND, spans);
	}

	/**
	 * 以前の日付を増加する
	 * 
	 * @param date
	 *            入力のString型
	 * @param style
	 *            入力のフォーマット
	 * @param type
	 *            (year,month,day,hour,minute,second)
	 * @param spans
	 *            いくら増加する
	 * @return String 以前の日付
	 */
	public static String addDate(String date, String style, int type, int spans) {
		Date inputDate = stringToDate(date, style);
		Calendar inputCalendar = Calendar.getInstance();
		inputCalendar.setTime(inputDate);
		inputCalendar.add(type, spans);
		return dateToString(inputCalendar.getTime(), style);
	}

	/**
	 * 一番早い期日を取得する
	 * 
	 * @param strDates
	 *            入力のString[]型
	 * @param style
	 *            入力のフォーマット
	 * 
	 * @return Date 一番早い期日
	 */
	public static String getEarliestDate(String[] strDates, String style) {
		if (strDates == null || strDates.length == 0) {
			return null;
		}
		List<Date> dates = new ArrayList<Date>();
		for (int i = 0; i < strDates.length; i++) {
			String subDate = strDates[i];
			if (!"".equals(StringUtils.nvl(subDate))) {
				dates.add(stringToDate(strDates[i], style));
			}
		}
		Date earliestDate = null;
		if (dates.size() > 0) {
			earliestDate = dates.get(0);
			for (Date value : dates) {
				if (earliestDate.compareTo(value) > 0) {
					earliestDate = value;
				}
			}
		}

		return dateToString(earliestDate, style);
	}

	/**
	 * ２つの時間の大きさを比較します
	 * 
	 * @param date1
	 *            入力のString型日付
	 * @param date2
	 *            入力のString型日付
	 * @param style
	 *            入力のフォーマット
	 * 
	 * @return 比較する結果 最初に小さいです 負数 2つは等しいです 0 最初に大きいです 正数
	 */
	public static int compareDate(String date1, String date2, String style) {
		Date dt1 = stringToDate(date1, style);
		Date dt2 = stringToDate(date2, style);

		return dt1.compareTo(dt2);

	}

	/**
	 * 西暦をyyyymmdd ----> yyyy年mm月dd日（曜日）のようなフォーマットに変換する
	 * 
	 * @param date
	 *            String
	 * @return String 変換した文字列
	 */
	public static String formatDateToString(String date) {
		if (!checkDateValid(date)) {
			return "";
		}
		StringBuilder sb = new StringBuilder(DateUtils.filteZeroDate(date,
				false));
		sb.append("(");
		sb.append(DateUtils.getYoubiName(date));
		sb.append(")");

		return sb.toString();
	}

	/**
	 * 西暦をyyyy/mm ----> yyyymmのようなフォーマットに変換する
	 * 
	 * @param date
	 *            String
	 * @return String 変換した文字列
	 */
	public static String formatDateMonthToString(String date) {
		if (!checkDateValidYearMonthEx(date)) {
			return "";
		}
		return date.replace("/", "");
	}

	/**
	 * 西暦をyyyyMMddHHmmss ----> yyyy年mm月dd日（曜日）HH:mmのようなフォーマットに変換する
	 * 
	 * @param time
	 *            String
	 * @return String 変換した文字列
	 */
	public static String formatTimeToString(String time) {
		if (time == null || time.length() < 12) {
			return "";
		}

		StringBuilder sb = new StringBuilder(DateUtils.filteZeroDate(
				time.substring(0, 8), false));
		sb.append("(");
		sb.append(DateUtils.getYoubiName(time.substring(0, 8)));
		sb.append(") ");
		if (NumberUtils.convertToInt(time.substring(8, 10)) == 12) {
			sb.append("昼");
		}
		sb.append(StringUtils.filteZero(time.substring(8, 10)));
		sb.append(":");
		sb.append(time.substring(10, 12));

		return sb.toString();
	}

	/**
	 * 西暦をyyyyMMddHHmmss ----> yyyy年mm月dd日或yyyy/mm/dd日（曜日）HH:mmのようなフォーマットに変換する
	 * 
	 * @param time
	 *            String
	 * @param shorttype
	 *            boolean
	 * @return String 変換した文字列
	 */
	public static String formatTimeToString(String time, boolean shorttype) {
		if (time == null || time.length() < 12) {
			return "";
		}

		StringBuilder sb = new StringBuilder(DateUtils.filteZeroDate(
				time.substring(0, 8), shorttype));
		sb.append("(");
		sb.append(DateUtils.getYoubiName(time.substring(0, 8)));
		sb.append(") ");
		if (NumberUtils.convertToInt(time.substring(8, 10)) == 12) {
			sb.append("昼");
		}
		sb.append(StringUtils.filteZero(time.substring(8, 10)));
		sb.append(":");
		sb.append(time.substring(10, 12));

		return sb.toString();
	}

	/**
	 * mm:ss ---> 昼mm:ss
	 * 
	 * @param inputTime
	 *            String
	 * @return String 変換した文字列
	 */
	public static String addNoon(String inputTime) {
		if (inputTime == null || inputTime.length() < 2) {
			return "";
		}
		if (NumberUtils.convertToInt(inputTime.substring(0, 2)) == 12) {
			return "昼" + inputTime;
		} else {
			return inputTime;
		}
	}

	/**
	 * 日時のMAX値の取得
	 * 
	 * @param list
	 *            日時
	 * @param style
	 *            入力のフォーマット
	 * @return maxDate 日時のMAX値
	 */
	public static String getMaxDate(List<String> list, String style) {
		String maxDate = null;
		if (list.size() >= 1) {
			maxDate = list.get(0);
		} else {
			return "";
		}
		for (String date : list) {
			if (date == null)
				continue;
			if (compareDate(maxDate, date, style) < 0) {
				maxDate = date;
			}
		}
		return maxDate;
	}

	/**
	 * Date型 ---> String型変換する
	 * 
	 * @param style
	 *            入力のフォーマット
	 * @return String String型時間
	 */
	public static String getCurrentDate(String style) {
		SimpleDateFormat dFmt = new SimpleDateFormat(style);
		return dFmt.format(new Date());
	}

	/**
	 * 指定した西暦の当日を取得する。<br>
	 * 
	 * @return Date
	 * 
	 */
	public static Date getCurrentDate() {
		return new Date();
	}

	/**
	 * YY型 ---> YYYY型変換する
	 * 
	 * @param yy
	 *            入力のyear
	 * @return String String型year
	 * 
	 */
	public static String getRealYear(String yy) {
		if (yy == null || "".equals(yy)) {
			return "";
		} else {
			return "20" + yy;
		}
	}

	/**
	 * 検索エンジン型日時変換する(yyyymmddhh24miss ---> yyyy-mm-ddThh24:mi:ssZ)
	 * 
	 * @precondition
	 * @param date
	 *            日時
	 * @return String 変換した文字列
	 * @since 1.0
	 * @todo なし
	 */
	public static String formatDateToSearchStyle(String date) {
		if (date == null || date.length() != 14) {
			return date;
		} else {
			StringBuilder bu = new StringBuilder();
			bu.append(date.substring(0, 4));
			bu.append("-");
			bu.append(date.substring(4, 6));
			bu.append("-");
			bu.append(date.substring(6, 8));
			bu.append(date.substring(8, 10));
			bu.append(":");
			bu.append(date.substring(10, 12));
			bu.append(":");
			bu.append(date.substring(12, 14));

			return bu.toString();
		}
	}

	/**
	 * デートタイプで日付の加減
	 * 
	 * @param dtToBeAdd
	 *            日付
	 * @param numToBeAdd
	 *            日数
	 * @return 加減後日付
	 */
	public static Date addDateByNum(Date dtToBeAdd, int numToBeAdd) {
		if (dtToBeAdd != null) {
			return stringToDate(
					addDay(dateToString(dtToBeAdd, DATESTYLE_SHORT_EX),
							DATESTYLE_SHORT_EX, numToBeAdd), DATESTYLE_SHORT_EX);
		} else {
			return null;
		}
	}

	/**
	 * 月数のカウント
	 * 
	 * @param day1
	 *            開始日付（yyyy/mm/dd）
	 * @param day2
	 *            終了日付（yyyy/mm/dd）
	 * 
	 * @return int 日付期間
	 */
	public static int computeMonths(String strDate1, String strDate2) {
		int iMonth = 0;
		int flag = 0;
		try {
			Calendar objCalendarDate1 = Calendar.getInstance();
			objCalendarDate1.setTime(DateFormat.getDateInstance().parse(
					strDate1));
			Calendar objCalendarDate2 = Calendar.getInstance();
			objCalendarDate2.setTime(DateFormat.getDateInstance().parse(
					strDate2));
			if (objCalendarDate2.equals(objCalendarDate1))
				return 0;
			if (objCalendarDate1.after(objCalendarDate2)) {
				Calendar temp = objCalendarDate1;
				objCalendarDate1 = objCalendarDate2;
				objCalendarDate2 = temp;
			}
			if (objCalendarDate2.get(Calendar.DAY_OF_MONTH) < objCalendarDate1
					.get(Calendar.DAY_OF_MONTH))
				flag = 1;
			if (objCalendarDate2.get(Calendar.YEAR) > objCalendarDate1
					.get(Calendar.YEAR))
				iMonth = ((objCalendarDate2.get(Calendar.YEAR) - objCalendarDate1
						.get(Calendar.YEAR))
						* 12
						+ objCalendarDate2.get(Calendar.MONTH) - flag)
						- objCalendarDate1.get(Calendar.MONTH);
			else
				iMonth = objCalendarDate2.get(Calendar.MONTH)
						- objCalendarDate1.get(Calendar.MONTH) - flag;
		} catch (Exception e) {
		}
		return iMonth;
	}

	/**
	 * 取得契約開始日，契約終了日（yyy/MM/dd格式的日付）
	 * 
	 * @param dateStr
	 *            日付
	 * @param dayFlag
	 *            月初月末フラグ，true:月初，false：月末
	 * @return yyyy/MM/dd格式的日付
	 */
	public static String getContractDate(String dateStr, boolean dayFlag) {
		if (dateStr == null) {
			return null;
		}
		int contractDateLength = dateStr.length();
		Date contractDateTemp = null;
		if (contractDateLength == 7) {
			if (dayFlag) {
				// 取得
				contractDateTemp = getMonthFirstDayOfYear(stringToDate(dateStr,
						DATESTYLE_YEAR_MONTH_EX));
			} else {
				contractDateTemp = getMonthLastDayOfYear(stringToDate(dateStr,
						DATESTYLE_YEAR_MONTH_EX));
			}

		} else if (contractDateLength == 10) {
			contractDateTemp = DateUtils.stringToDate(dateStr,
					DateUtils.DATESTYLE_SHORT_EX);
		}
		return dateToString(contractDateTemp, DATESTYLE_SHORT_EX);
	}

	/**
	 * 
	 * @precondition 取得当前月的月初日付
	 * @param date
	 * @return
	 */
	public static Date getMonthFirstDayOfYear(Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.set(Calendar.DAY_OF_MONTH, 1);
		return cal.getTime();
	}

	/**
	 * 
	 * @precondition 取得当前月的月末日付
	 * @param date
	 * @return
	 * @see xxxClass#xxxMethod
	 * @since 1.0
	 * @todo 未完了事項2
	 */
	public static Date getMonthLastDayOfYear(Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		// 当前月＋1，即下个月
		cal.add(Calendar.MONTH, 1);
		// 将下个月1号作为日期初始zhii
		cal.set(Calendar.DATE, 1);
		// 下个月1号减去一天，即得到当前月最后一天
		cal.add(Calendar.DATE, -1);
		return cal.getTime();
	}

	public static String dateToStringEng(Date date, String pattern) {
		if (date == null) {
			return "";
		}
		DateFormat formatter = new SimpleDateFormat(pattern, Locale.ENGLISH);
		return formatter.format(date);
	}

	/**
	 * From日付から 何ヶ月後の比較用の標準日付(TO)をチェックする BUG12128 共通メッソド追加
	 * 
	 * @param fromDate
	 *            From日付 (Date)
	 * @param toDate
	 *            To日付 (Date)
	 * @param month
	 *            何ヶ月 (int) 計算用
	 * @return boolean チェックフラグ(期間内の場合 true 期間外の場合 false)
	 */
	public static boolean checkTargetDate(Date fromDate, Date toDate, int month) {
		String toDateForCompareStr = null;
		Calendar c1 = Calendar.getInstance();
		Calendar c2 = Calendar.getInstance();
		c1.clear();
		c2.clear();
		c1.setTime(fromDate);
		c2.setTime(toDate);
		// From日付の日を取得する
		int dayFrom = c1.get(Calendar.DATE);
		// //To日付の日を取得する
		// int dayTo = c2.get(Calendar.DATE);
		// From日付の月末を取得する
		int lastDayFrom = c1.getActualMaximum(Calendar.DAY_OF_MONTH);
		// From日付月末の場合
		if (dayFrom == lastDayFrom) {
			String toDateForCompareStrTemp = DateUtils
					.addMonth(DateUtils.dateToString(fromDate,
							DateUtils.DATESTYLE_SHORT), "yyyyMMdd", month);
			Date toDateForCompareDateTemp = DateUtils.stringToDate(DateUtils
					.formatDate(toDateForCompareStrTemp, true));
			Calendar cTemp = Calendar.getInstance();
			cTemp.clear();
			cTemp.setTime(toDateForCompareDateTemp);
			int lastDay = cTemp.getActualMaximum(Calendar.DAY_OF_MONTH);
			cTemp.set(Calendar.DATE, lastDay);
			SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
			toDateForCompareStr = simpleDateFormat.format(cTemp.getTime());
		}
		// From日付月末ではない場合
		else {
			toDateForCompareStr = DateUtils
					.addMonth(DateUtils.dateToString(fromDate,
							DateUtils.DATESTYLE_SHORT), "yyyyMMdd", month);
		}
		String toDateStr = DateUtils.dateToString(toDate,
				DateUtils.DATESTYLE_SHORT);
		if (toDateForCompareStr.compareTo(toDateStr) < 0) {
			return false;
		} else {
			return true;
		}

	}

	/**
	 * 
	 * <pre>
	 * methodの説明（1行目：概要） 
	 *            （2行目以降：詳細）
	 * </pre>
	 * 
	 * @param Strdate
	 * @param date
	 * @return [2013/09/04,2013/09/05......]
	 */
	public static String[] getDateArr(String Strdate, int date) {
		String[] dateArr = new String[date];
		SimpleDateFormat formatter = new SimpleDateFormat(DATESTYLE_SHORT_EX);
		Calendar calendar = Calendar.getInstance();
		Date da = stringToDate(Strdate);
		calendar.setTime(da);
		for (int i = 0; i < date; i++) {
			if (i == 0) {
				calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) + 0);
			} else {
				calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) + 1);
			}

			dateArr[i] = formatter.format(calendar.getTime());
		}
		return dateArr;
	}

	/**
	 * 
	 * <pre>
	 * methodの説明   "2013/06/05:2013年06月05日(水)"
	 * </pre>
	 * 
	 * @param Strdate
	 * @param date
	 * @return
	 */
	public static String[] getDateArr2(String Strdate, int date) {
		String[] dateArr = new String[date];
		SimpleDateFormat formatter = new SimpleDateFormat(DATESTYLE_SHORT_EX);
		SimpleDateFormat formatter1 = new SimpleDateFormat(DATESTYLE_SHORT);
		Calendar calendar = Calendar.getInstance();
		Date da = stringToDate(Strdate);
		calendar.setTime(da);
		for (int i = 0; i < date; i++) {
			if (i == 0) {
				calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) + 0);
			} else {
				calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) + 1);
			}

			dateArr[i] = formatter.format(calendar.getTime()) + ":"
					+ formatDate(formatter1.format(calendar.getTime()), false)
					+ "(" + getYoubiName(formatter1.format(calendar.getTime()))
					+ ")";
		}
		return dateArr;
	}

	/**
	 * 
	 * <pre>
	 * methodの説明（1行目：概要） 
	 *            （2行目以降：詳細）
	 * </pre>
	 * 
	 * @param sDatee
	 * @param eDate
	 * @return Map<String,String>->Map<"2013/06/05","2013年06月05日(水)">
	 * @exception 例外class名
	 *                説明
	 */
	public static Map<String, String> getDateMap(String sDate, String eDate) {
		Map<String, String> dateMap = new HashMap<String, String>();
		SimpleDateFormat formatter = new SimpleDateFormat(DATESTYLE_SHORT_EX);
		SimpleDateFormat formatter1 = new SimpleDateFormat(DATESTYLE_SHORT);
		try {
			Calendar sc = Calendar.getInstance();
			Calendar ec = Calendar.getInstance();
			sc.setTime(formatter.parse(sDate));
			if (null == eDate || "".equals(eDate)) {
				String strValue = formatDate(formatter1.format(sc.getTime()),
						false)
						+ "("
						+ getYoubiName(formatter1.format(sc.getTime())) + ")";
				String strKey = formatter.format(sc.getTime());
				dateMap.put(strKey, strValue);
			} else {
				sc.add(Calendar.DAY_OF_YEAR, -1);
				ec.setTime(formatter.parse(eDate));
				while (sc.before(ec)) {
					sc.add(Calendar.DAY_OF_YEAR, 1);
					String strValue = formatDate(
							formatter1.format(sc.getTime()), false)
							+ "("
							+ getYoubiName(formatter1.format(sc.getTime()))
							+ ")";
					String strKey = formatter.format(sc.getTime());
					dateMap.put(strKey, strValue);
				}
			}

		} catch (ParseException e) {
			e.printStackTrace();
		}
		return dateMap;
	}

	/**
	 * 
	 * <pre>
	 * methodの説明  "2013年06月05日(水)"
	 * </pre>
	 * 
	 * @param date
	 * @return
	 */
	public static String getDateToStr(String date) {
		SimpleDateFormat formatter = new SimpleDateFormat(DATESTYLE_SHORT_EX);
		SimpleDateFormat formatter1 = new SimpleDateFormat(DATESTYLE_SHORT);
		Calendar sc = Calendar.getInstance();
		try {
			sc.setTime(formatter.parse(date));
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return formatDate(formatter1.format(sc.getTime()), false) + "("
				+ getYoubiName(formatter1.format(sc.getTime())) + ")";
	}

	/**
	 * 
	 * <pre>
	 * methodの説明   {2012/1/1,2012/1/2.....}
	 * </pre>
	 * 
	 * @param sDatee
	 * @param eDate
	 * @return String[]{2012/1/1,2012/1/2.....}
	 */
	public static String[] getDateArr(String sDatee, String eDate) {
		List<String> dateList = new ArrayList<String>();
		SimpleDateFormat formatter = new SimpleDateFormat(DATESTYLE_SHORT_EX);
		Calendar sc = Calendar.getInstance();
		Calendar ec = Calendar.getInstance();
		try {
			sc.setTime(formatter.parse(sDatee));
			sc.add(Calendar.DAY_OF_YEAR, -1);
			ec.setTime(formatter.parse(eDate));
			while (sc.before(ec)) {
				sc.add(Calendar.DAY_OF_YEAR, 1);
				String strKey = formatter.format(sc.getTime());
				dateList.add(strKey);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return dateList.toArray(new String[dateList.size()]);
	}

	/**
	 * 
	 * <pre>
	 * methodの説明   {"2013/06/05:2013年06月05日(水)","2013/06/06:2013年06月06日()"}
	 * </pre>
	 * 
	 * @param sDatee
	 * @param eDate
	 * @return String[]{"2013/06/05:2013年06月05日(水)","2013/06/06:2013年06月06日()"}
	 */
	public static String[] getDateArr2(String sDatee, String eDate) {
		List<String> dateList = new ArrayList<String>();
		SimpleDateFormat formatter = new SimpleDateFormat(DATESTYLE_SHORT_EX);
		SimpleDateFormat formatter1 = new SimpleDateFormat(DATESTYLE_SHORT);
		Calendar sc = Calendar.getInstance();
		Calendar ec = Calendar.getInstance();
		try {
			sc.setTime(formatter.parse(sDatee));
			sc.add(Calendar.DAY_OF_YEAR, -1);
			ec.setTime(formatter.parse(eDate));
			while (sc.before(ec)) {
				sc.add(Calendar.DAY_OF_YEAR, 1);
				String strKey = formatter.format(sc.getTime()) + ":"
						+ formatDate(formatter1.format(sc.getTime()), false)
						+ "(" + getYoubiName(formatter1.format(sc.getTime()))
						+ ")";
				dateList.add(strKey);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return dateList.toArray(new String[dateList.size()]);
	}

	/**
	 * 日時のMIN値の取得
	 * 
	 * @param list
	 *            日時
	 * @param style
	 *            入力のフォーマット
	 * @return maxDate 日時のMIN値
	 */
	public static String getMinDate(List<String> list, String style) {
		String minDate = null;
		if (list.size() >= 1) {
			minDate = list.get(0);
		} else {
			return "";
		}
		for (String date : list) {
			if (StringUtils.isEmpty(date))
				continue;
			if (compareDate(minDate, date, style) > 0) {
				minDate = date;
			}
		}
		return minDate;
	}

	/**
	 * 20年の取得
	 * 
	 * 
	 * @return list 20年
	 */
	public static List<String> getTwentyYear() {
		SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
		String yymmdd = df.format(new Date());
		String yyyy = yymmdd.substring(0, 4);
		int year = Integer.parseInt(yyyy) - 10;
		List<String> years = new ArrayList<String>();
		for (int i = 0; i < 20; i++) {
			years.add((year + i) + "");
		}
		return years;
	}

	/**
	 * 月の取得
	 * 
	 * 
	 * @return month
	 */
	public static String getMonth() {
		SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
		String yymmdd = df.format(new Date());
		String mm = yymmdd.substring(4, 6);
		return mm;
	}

	/**
	 * 1月日数の取得
	 * 
	 * 
	 * @return list
	 */
	public static List<String> getMonthDays() {
		List<String> days = new ArrayList<String>();
		Calendar c = Calendar.getInstance();
		int maxday = c.getActualMaximum(Calendar.DAY_OF_MONTH);
		for (int i = 1; i <= maxday; i++) {
			if (i < 10) {
				days.add("0" + Integer.toString(i));
			} else {
				days.add(i + "");
			}
		}
		return days;
	}
	
	/**
	 * 年月を日数の取得
	 * 
	 * 
	 * @return list
	 */
	public static List<String> getDaysByYearMonth(String year,String month) {
		List<String> days = new ArrayList<String>();
		Calendar rightNow = Calendar.getInstance();		 
		SimpleDateFormat simpleDate = new SimpleDateFormat("yyyy/MM");	 
		try {			
		    rightNow.setTime(simpleDate.parse(year+"/"+month)); 
		} catch (ParseException e) {
            e.printStackTrace();
		}
		int maxday = rightNow.getActualMaximum(Calendar.DAY_OF_MONTH);
		for (int i = 1; i <= maxday; i++) {
			if (i < 10) {
				days.add("0" + Integer.toString(i));
			} else {
				days.add(i + "");
			}
		}
		return days;
	}

	/**
	 * 日の取得
	 * 
	 * 
	 * @return day
	 */
	public static String getDay() {
		SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
		String yymmdd = df.format(new Date());
		String dd = yymmdd.substring(6);
		return dd;
	}
	
	/**
	 * 一段日期の取得
	 * 
	 * 
	 * @return day
	 */
	public static List<String> getDaySub(String datestart,String dateend){
		int day =0;
		String year = datestart.substring(0,4);
		String monthstart = datestart.substring(5,7);
		String monthend = dateend.substring(5,7);
		int daystart = Integer.parseInt(datestart.substring(8));
		int dayend = Integer.parseInt(dateend.substring(8));
		if(monthstart.equals(monthend)){
			day = dayend - daystart;
		}else{
			//起始月是30天时
			if(monthstart.equals("04")||monthstart.equals("06")||monthstart.equals("09")||monthstart.equals("11")){
				day = dayend +(30-daystart);
			}else if(monthstart.equals("02")){
				if(Integer.parseInt(year)%4==0){
					 day = dayend +(29-daystart);
				}else{
					day = dayend +(28-daystart);
				}
			}else{
				day = dayend +(31-daystart);
			}
		}
		
		List<String> list =new ArrayList<String>();
		String date ="";
		for(int i=0;i<=day;i++){
			if(monthstart.equals(monthend)){
				if(daystart+i<10){
					date = datestart.substring(0,8)+("0"+Integer.toString(daystart+i));
					list.add(date);
				}else{
					date = datestart.substring(0,8)+Integer.toString(daystart+i);
					list.add(date);
				}
			}else{
				//起始月是30天时
				if(monthstart.equals("04")||monthstart.equals("06")||monthstart.equals("09")||monthstart.equals("11")){
					 if(daystart+i>30){
						date = dateend.substring(0,8)+Integer.toString(daystart+i-30);
						list.add(date);
					 }else{
						date = datestart.substring(0,8)+Integer.toString(daystart+i);
						list.add(date);
					 }
				}else if(monthstart.equals("02")){
					if(Integer.parseInt(year)%4==0){
						 if(daystart+i>29){
								date = dateend.substring(0,8)+Integer.toString(daystart+i-29);
								list.add(date);
								
							 }else{
								date = datestart.substring(0,8)+Integer.toString(daystart+i);
								list.add(date);
							 }
					}else{
						 if(daystart+i>28){
								date = dateend.substring(0,8)+Integer.toString(daystart+i-28);
								list.add(date);
							 }else{
								date = datestart.substring(0,8)+Integer.toString(daystart+i);
								list.add(date);
							 }
					}
					
				}else{
					 if(daystart+i>31){
							date = dateend.substring(0,8)+Integer.toString(daystart+i-31);
							list.add(date);
						 }else{
							date = datestart.substring(0,8)+Integer.toString(daystart+i);
							list.add(date);
						 }
				}
			}
		}
		return list;
	}
	
	/**
	 * 星期flagの取得
	 * 
	 * 
	 * @return day
	 */
	public static String getWeekFlagByDate(String date){
		int y = Integer.parseInt(date.substring(0, 4));
		int m = Integer.parseInt(date.substring(5, 7));
		int d = Integer.parseInt(date.substring(8));
        if(m==1) {m=13;y--;}
        if(m==2) {m=14;y--;}
        int week=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7; 
        String weekstr="";
        switch(week)
        {
            case 0: weekstr="2"; break;//月曜日
            case 1: weekstr="3"; break;//火曜日
            case 2: weekstr="4"; break;//水曜日
            case 3: weekstr="5"; break;//木曜日
            case 4: weekstr="6"; break;//金曜日
            case 5: weekstr="7"; break;//土曜日
            case 6: weekstr="1"; break;//日曜日
         }
		return weekstr;
	}
	
	/**
	 * 星期の取得
	 * 
	 * 
	 * @return day
	 */
	public static String getWeekByDate(String date){
		int y = Integer.parseInt(date.substring(0, 4));
		int m = Integer.parseInt(date.substring(5, 7));
		int d = Integer.parseInt(date.substring(8));
        if(m==1) {m=13;y--;}
        if(m==2) {m=14;y--;}
        int week=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7; 
        String weekstr="";
        switch(week)
        {
            case 0: weekstr="月"; break;//月曜日
            case 1: weekstr="火"; break;//火曜日
            case 2: weekstr="水"; break;//水曜日
            case 3: weekstr="木"; break;//木曜日
            case 4: weekstr="金"; break;//金曜日
            case 5: weekstr="土"; break;//土曜日
            case 6: weekstr="日"; break;//日曜日
         }
		return weekstr;
	}
	
	/**
	 * 年の取得
	 * 
	 * 
	 * @return month
	 */
	public static String getYear() {
		SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
		String yymmdd = df.format(new Date());
		String mm = yymmdd.substring(0, 4);
		return mm;
	}
}
